package com.draven.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.draven.entity.Note;

/**
 * 笔记服务接口
 */
public interface NoteService {

    /**
     * 添加笔记
     *
     * @param userId   用户ID
     * @param title    标题
     * @param content  内容
     * @param category 分类
     * @param tags     标签
     * @return ID
     */
    Long add(Long userId, String title, String content, String category, String tags);
    
    /**
     * 添加笔记（使用实体类）
     *
     * @param note 笔记实体
     * @return ID
     */
    Long add(Note note);

    /**
     * 修改笔记
     *
     * @param id       ID
     * @param userId   用户ID
     * @param title    标题
     * @param content  内容
     * @param category 分类
     * @param tags     标签
     */
    void update(Long id, Long userId, String title, String content, String category, String tags);
    
    /**
     * 修改笔记（使用实体类）
     *
     * @param note 笔记实体
     */
    void update(Note note);

    /**
     * 删除笔记
     *
     * @param id     ID
     * @param userId 用户ID
     */
    void delete(Long id, Long userId);

    /**
     * 获取笔记详情
     *
     * @param id     ID
     * @param userId 用户ID
     * @return 笔记信息
     */
    Note getDetail(Long id, Long userId);

    /**
     * 分页查询笔记
     *
     * @param userId   用户ID
     * @param title    标题
     * @param category 分类
     * @param tag      标签
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @return 分页结果
     */
    Page<Note> page(Long userId, String title, String category, String tag, Integer pageNum, Integer pageSize);
    
    /**
     * 统计用户的笔记数量
     *
     * @param userId 用户ID
     * @return 笔记数量
     */
    int countByUserId(Long userId);
} 